// 初始化编辑器
const editor = new Editor({
    element: document.querySelector('.editor-content'),
    extensions: [Bold, Italic]
  })
  
  // 获取菜单元素
  const menu = document.querySelector('.bubble-menu')
  let scrollParents = []
  let rafId = null
  
  // 初始化滚动监听
  function initScrollTracking() {
    // 获取所有可能滚动的父级容器
    scrollParents = getScrollParents(editor.view.dom)
    
    // 添加滚动监听（带节流）
    scrollParents.forEach(container => {
      container.addEventListener('scroll', handleScroll, { passive: true })
    })
  }
  
  // 销毁监听
  function destroyScrollTracking() {
    scrollParents.forEach(container => {
      container.removeEventListener('scroll', handleScroll)
    })
  }
  
  // 滚动处理函数（性能优化版）
  function handleScroll() {
    if (rafId) return
    rafId = requestAnimationFrame(() => {
      updateMenuPosition()
      rafId = null
    })
  }
  
  // 更新菜单位置（核心逻辑）
  function updateMenuPosition() {
    const selection = editor.state.selection
    if (selection.empty) {
      menu.style.display = 'none'
      return
    }
  
    // 获取选区坐标（视口相对位置）
    const coords = getViewportRelativeCoords(selection)
    
    // 智能避障计算
    const safePosition = calculateSafePosition(coords, menu.offsetWidth, menu.offsetHeight)
    
    // 应用位置
    menu.style.display = 'block'
    menu.style.transform = `translate(${safePosition.x}px, ${safePosition.y}px)`
    menu.style.opacity = '1'
  }
  
  // 工具函数：获取视口相对坐标
  function getViewportRelativeCoords(selection) {
    const { from, to } = selection
    const startRect = editor.view.coordsAtPos(from)
    const endRect = editor.view.coordsAtPos(to)
    
    return {
      x: startRect.left,
      y: (startRect.top + endRect.top) / 2 - 40,
      right: window.innerWidth - startRect.right,
      bottom: window.innerHeight - endRect.bottom
    }
  }
  
  // 工具函数：智能避障计算
  function calculateSafePosition(coords, menuWidth, menuHeight) {
    const MARGIN = 8
    let x = coords.x
    let y = coords.y
  
    // 水平方向调整
    if (x + menuWidth > window.innerWidth - MARGIN) {
      x = window.innerWidth - menuWidth - MARGIN
    } else if (x < MARGIN) {
      x = MARGIN
    }
  
    // 垂直方向调整
    if (y + menuHeight > window.innerHeight - MARGIN) {
      y = coords.y - menuHeight - 20
    } else if (y < MARGIN) {
      y = MARGIN
    }
  
    return { x, y }
  }
  
  // 工具函数：获取所有滚动父级
  function getScrollParents(element) {
    const parents = []
    let node = element
    
    while (node && node !== document.body) {
      const overflow = window.getComputedStyle(node).overflow
      if (['auto', 'scroll'].includes(overflow)) {
        parents.push(node)
      }
      node = node.parentElement
    }
    parents.push(window)
    return parents
  }
  
  // 初始化
  editor.on('selectionUpdate', updateMenuPosition)
  initScrollTracking()
  
  // 清理
  window.addEventListener('beforeunload', () => {
    destroyScrollTracking()
    cancelAnimationFrame(rafId)
  })